這幾天我們都一直在介紹 Redis 的相關知識,今天我們就來了解一下 Redis 作爲一個 記憶體資料庫
他擁有什麼記憶體淘汰策略
記憶體淘汰策略是一種算法或方法,用於決定當記憶體(特別是 RAM)接近或已達到其最大容量時,哪些資料或項目應該被 移除
或 淘汰
以釋放空間
這種策略的主要目的是確保系統在記憶體受限的情況下仍能正常運作
有限的記憶體資源:就像剛剛提到的,記憶體(RAM)是有限的。當資料持續增加,並且快速地填滿可用的記憶體時,系統需要一種方法來決定哪些資料應該留在記憶體中,哪些應該被移除
確保性能:不適合的記憶體管理可能會導致系統性能下降。例如,當記憶體滿了,卻沒有合適的淘汰策略,可能會導致新的請求或操作被拒絕,或系統必須頻繁地將資料移動到磁盤上,這會大大降低性能
資料的重要性不同:不是所有在記憶體中的資料都是一樣重要的。某些資料可能是暫時的、過期的或不再需要的,但是有些資料可能對系統的運作至關重要記憶體淘汰策略可以幫助系統區分這些資料,並作出明智的決策
提高系統的可靠性:正確的記憶體淘汰策略可以確保在記憶體壓力下,系統仍然可靠。例如,避免因滿記憶體導致的系統崩潰或錯誤
Redis 記憶體淘汰策略共有有 8 種
當記憶體使用達到 maxmemory
指定的上限時,每次寫入操作都會被拒絕,並返回一個錯誤,告訴客戶端記憶體已滿。這是預設的策略。
當記憶體達到上限時,Redis 會根據 LRU (Least Recently Used,最近最少使用) 算法淘汰一些 Key ,然後再進行寫操作
這與 allkeys-lru
類似,但只對設置了 TTL(過期時間)
的 Key 進行淘汰
當記憶體達到上限時,Redis 會隨機選擇一些鍵進行淘汰。
這與 allkeys-random
類似,但只對設置了 TTL
的鍵進行淘汰。
在這種策略下,Redis 會優先淘汰那些剩餘生存時間 (TTL
) 較短的鍵
此策略會淘汰最近最不常被訪問的鍵,但只對設置了 TTL
的鍵進行淘汰
此策略會淘汰最近最不常被訪問的鍵,不考慮該鍵是否設置了 TTL
noeviction
-- 可以使用 config get maxmemory-policy 指令
-- 来查看現在 Redis 的記憶體淘汰策略
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
使用 config set maxmemory-policy <策略名>
指令設定,好處是設定之後會立即生效,不需要重新啟動 Redis ,壞處是若是重新啟動 Redis 之後,這次的設定就會失效
修改 Redis 的設定文件 redis.conf
,在文件中設定 maxmemory-policy <策略名>
就好,好處是重新啟動 Redis 之後設定不會失效,缺點是這種方式一定要重新啟動 Redis 才能生效
在剛剛提到了 Redis 的 8 種記憶體淘汰策略,我們有看到 LFU & LRU 我們來介紹一下這兩者是什麼
LFU 和 LRU 是兩種常用的記憶體淘汰策略
它們用於決定當緩存達到其容量上限時,哪些項目應該被淘汰或替換出緩存
這兩種策略都有其優點和缺點,選擇哪一種策略取決於具體的應用場景和需求